package com.example.transation.txlcncommon.config;

import com.example.transation.txlcncommon.bean.BaseException;
import com.example.transation.txlcncommon.bean.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义全局异常处理
 *
 * @author luojm
 * 2019-11-22 15:24:58
 */
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

//    /**
//     * 系统异常处理器
//     * @param throwable
//     * @param request
//     * @return
//     */
//    @ExceptionHandler(Throwable.class)
//    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)   // 指定http状态码，如果不指定为非2xx，feign不会抛出异常
//    public Result systemExceptionHandler(Throwable throwable, HttpServletRequest request) {
//        log.error("URL：{} ,系统异常", request.getRequestURI(), throwable);
//        return Result.fail();
//    }
//
//    /**
//     * 自定义异常处理器
//     */
//    @ExceptionHandler(BaseException.class)
//    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)   // 指定http状态码，如果不指定为非2xx，feign不会抛出异常
//    public Result baseExceptionHandler(BaseException baseException, HttpServletRequest request) {
//        log.warn("URL：{} ,业务异常", request.getRequestURI());
//        return Result.fail(baseException.getStatus(), baseException.getMessage());
//    }

    @ExceptionHandler(value = BaseException.class)
    public Result defaultErrorHandler(HttpServletRequest req, HttpServletResponse resp, BaseException e) {

        log.info(e.getMessage());
        if (e.getStatus() == 400) {
           return Result.fail(e.getMessage());
        } else {
            resp.setStatus(500);
            return  Result.fail(e.getMessage());
        }

    }
}
